package com.lzq.model.template;

/**
 * @author : modify
 * @version : v1.0
 * @description :
 * @createTime : 2022/11/26 17:18
 * @updateUser : modify
 * @updateTime : 2022/11/26 17:18
 * @updateRemark :
 */
public abstract class AbstractClass {
    public final void cookProcess() {
        this.pourOil();
        this.heatOil();
        this.pourVegetable();
        this.pourSauce();
        this.fry();
    }

    public void pourOil() {
        System.out.println("倒油");
    }

    public void heatOil() {
        System.out.println("热油");
    }

    /**
     * 加菜
     */
    public abstract void pourVegetable();

    /**
     * 加配料
     */
    public abstract void pourSauce();

    public void fry() {
        System.out.println("炒啊炒啊炒到熟啊");
    }
}

class ConcreteClassBaoCai extends AbstractClass {

    @Override
    public void pourVegetable() {
        System.out.println("下包菜");
    }

    @Override
    public void pourSauce() {
        System.out.println("加辣椒");
    }
}

class ConcreteClassCaiXin extends AbstractClass {

    @Override
    public void pourVegetable() {
        System.out.println("下菜心");
    }

    @Override
    public void pourSauce() {
        System.out.println("加蒜蓉");
    }
}

class Test {
    public static void main(String[] args) {
        ConcreteClassBaoCai baoCai = new ConcreteClassBaoCai();
        baoCai.cookProcess();
    }
}